﻿using System;
using System.Threading.Tasks;

namespace Website.Games.Bodka_v_Bare;

public class Bodka_v_Bare
{
	public readonly BlazorConsole Console = new();

	public async Task Run()
	{
		await Console.WriteLine("После истории с Василием, Богдан потерял смысл в своих кусях.");
		await Console.WriteLine("Как любой уважающий себя мужчина, он крепко решил взяться за свою жизнь и...");
		await Console.WriteLine("Пошёл в бар...");
		await Console.WriteLine("В баре он познакомился с Дмитрием, который выплачивает кредит и подрабатывает барменом");
		await Console.WriteLine("Дмитрий не был одарённым барменом, но был аккуратен. Встретив Бодю, он вспомнил прошлую свою посетительницу");
		await Console.WriteLine("Паучиху Хиху");
		await Console.WriteLine("Он рассказал Богдану, что Хиха очень позитивная паучиха, но ходит в бар не часто.");
		await Console.WriteLine("И хотя Богдан надеялся её увидеть, после пяток Василия он стал гурманом и \nхотел пробовать каждый раз новый коктейль от Дмитрия");
		await Console.WriteLine("История продолжается в баре...");            
		await Console.WriteLine();
		await Console.WriteLine("Правила игры:");
		await Console.WriteLine("Богдану нужно просидеть в баре 20 дней.");
		await Console.WriteLine("Вы играете за Дмитрия. Ваша задача —  готовить коктейли по рецепту без ошибок");
		await Console.WriteLine("Рецепт — это набор символов, который нужно ввести на клавиатуре. У вас 5 жизней.");
		await Console.WriteLine("На лёгком уровне сложности меньше символов, чем на высоком");
		await Console.WriteLine("Удачи!");
		await Console.WriteLine();
		await Console.WriteLine("Выберите уровень сложности. 1 — лёгкий, 2 — сложный.");
		string level = await Console.ReadLine(true);

		while ((level != "1") || (level != "2"))
		{
			if (level == "1")
			{
				int day = 1;
				int health = 5;
				bool flag = true;
				string drinks = "0123456789abcdefghijklmnopqrstuvwxyz";
				string drink = "";

				Random rand = new Random();

				while (flag)
				{
					await Console.WriteLine();
					await Console.WriteLine($"День {day}. Здоровье {health}.");
					for (int i = 0; i < day; i++)
					{
						int index = rand.Next(drinks.Length);
						string b = drinks[index].ToString();
						drink += b;
					}
					await Console.WriteLine(drink);
					string barmen = await Console.ReadLine(true);
					if (barmen == drink)
					{
						drink = "";
					}
					else
					{
						drink = "";
						health -= 1;
					}

					if ((health <= 0) || (day >= 20))
					{
						flag = false;
						if (health <= 0)
						{
							await Console.WriteLine();
							await Console.WriteLine("Вы проиграли");
							await Console.WriteLine("Богдан так и не встретил Хиху");
							await Console.WriteLine("Попробовать снова? y — да, n — нет");
							string end = await Console.ReadLine(true);
							while ((end != "y") || (end != "n"))
							{
								if (end == "y")
								{
									flag = true;
									health = 5;
									day = 0;
									drink = "";
									break;
								}
								else if (end == "n")
								{
									await Console.WriteLine();
									await Console.WriteLine("Жаль");
									await Console.WriteLine("Тогда пока!");
									break;
								}
								else
								{
									await Console.WriteLine("Попробовать снова? y — да, n — нет");
									end = await Console.ReadLine(true);
								}
							}
						}
						
						if (day >= 20)
						{
							await Console.WriteLine();
							await Console.WriteLine("Вы выиграли");
							await Console.WriteLine("Богдан встретил паучиху Хиху. Дмитрий оплатил кредит благодаря деньгам паучков! Идилия!)");
							await Console.WriteLine("Попробовать снова? y — да, n — нет");
							string end = await Console.ReadLine(true);
							while ((end != "y") || (end != "n"))
							{
								if (end == "y")
								{
									flag = true;
									health = 5;
									day = 0;
									drink = "";
									break;
								}
								else if (end == "n")
								{
									await Console.WriteLine();
									await Console.WriteLine("Жаль");
									await Console.WriteLine("Тогда пока!");
									break;
								}
								else
								{
									await Console.WriteLine("Попробовать снова? y — да, n — нет");
									end = await Console.ReadLine(true);
								}
							}
						}
					}
					day += 1;
				} 
				break;
			}
			else if (level == "2")
			{
				int day = 1;
				int health = 5;
				bool flag = true;
				string drinks = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
				string drink = "";

				Random rand = new Random();

				while (flag)
				{
					await Console.WriteLine();
					await Console.WriteLine($"День {day}. Здоровье {health}.");
					for (int i = 0; i < day; i++)
					{
						int index = rand.Next(drinks.Length);
						string b = drinks[index].ToString();
						drink += b;
					}
					await Console.WriteLine(drink);
					string barmen = await Console.ReadLine(true);
					if (barmen == drink)
					{
						drink = "";
					}
					else
					{
						drink = "";
						health -= 1;
					}
					
					if ((health <= 0) || (day >= 20))
					{
						flag = false;
						if (health <= 0)
						{
							await Console.WriteLine();
							await Console.WriteLine("Вы проиграли");
							await Console.WriteLine("Богдан так и не встретил Хиху");
							await Console.WriteLine("Попробовать снова? y — да, n — нет");
							string end = await Console.ReadLine(true);
							while ((end != "y") || (end != "n"))
							{
								if (end == "y")
								{
									flag = true;
									health = 5;
									day = 0;
									drink = "";
									break;
								}
								else if (end == "n")
								{
									await Console.WriteLine();
									await Console.WriteLine("Жаль");
									await Console.WriteLine("Тогда пока!");
									break;
								}
								else
								{
									await Console.WriteLine("Попробовать снова? y — да, n — нет");
									end = await Console.ReadLine(true);
								}
							}
						}
						
						if (day >= 20)
						{
							await Console.WriteLine();
							await Console.WriteLine("Вы выиграли");
							await Console.WriteLine("Богдан встретил паучиху Хиху. Дмитрий оплатил кредит благодаря деньгам паучков! Идилия!)");
							await Console.WriteLine("Попробовать снова? y — да, n — нет");
							string end = await Console.ReadLine(true);
							while ((end != "y") || (end != "n"))
							{
								if (end == "y")
								{
									flag = true;
									health = 5;
									day = 0;
									drink = "";
									break;
								}
								else if (end == "n")
								{
									await Console.WriteLine();
									await Console.WriteLine("Жаль");
									await Console.WriteLine("Тогда пока!");
									break;
								}
								else
								{
									await Console.WriteLine("Попробовать снова? y — да, n — нет");
									end = await Console.ReadLine(true);
								}
							}
						}
					}
					day += 1;
				}
				break;
			}
			else
			{
				await Console.WriteLine("Попробуй снова. 1 — лёгкий, 2 — сложный.");
				level = await Console.ReadLine(true);
			}
		}
	}
}